#include <stdio.h>
#include "algorithm.h"
#include "vectorbool.h"

#include "algorithm.c++"

void print_bool(bool b)
{
  printf("%s\n", (b ? "true" : "false"));
}

void print_int(int i)
{
  printf("%i\n", i);
}

int data[] =
{
  true,
  true,
  false,
  true,
  false,
  false,
  false,
  true,
  true,
  false
};

void main()
{
  vector_bool v1(data, data+10);
  vector_bool v2(v1);

//  printf("v1 == v2: %i\n\n", v1 == v2);

  for_each(v1.begin(), v1.end(), print_bool);
  print_int(v1.size());
  print_int(v1.count());
  printf("\n");

  for_each(v1.rbegin(), v1.rend(), print_bool);
  printf("\n");

  v1.insert(v1.begin()+4, 10, true);
  for_each(v1.begin(), v1.end(), print_bool);
  print_int(v1.size());
  print_int(v1.count());
  printf("\n");

  v1.erase(v1.begin(), v1.begin()+2);
  for_each(v1.begin(), v1.end(), print_bool);
  print_int(v1.size());
  print_int(v1.count());
  printf("\n");

//  printf("v1 == v2: %i\n\n", v1 == v2);

  for(size_t p = v1.find(true); p != vector_bool::npos; p = v1.find(true, p+1))
    print_int(p);
  printf("\n");

  for(p = v1.find(false); p != vector_bool::npos; p = v1.find(false, p+1))
    print_int(p);
  printf("\n");

  for(p = v1.rfind(true); p != vector_bool::npos; p = v1.rfind(true, p))
    print_int(p);
  printf("\n");

  for(p = v1.rfind(false); p != vector_bool::npos; p = v1.rfind(false, p))
    print_int(p);
  printf("\n");

  random_shuffle(v1.begin(), v1.end());
  for_each(v1.begin(), v1.end(), print_bool);
  print_int(v1.size());
  print_int(v1.count());
  printf("\n");

  copy(v2.begin(), v2.end(), v1.begin());
  for_each(v1.begin(), v1.end(), print_bool);
  print_int(v1.size());
  print_int(v1.count());
  printf("\n");

  copy_backward(v2.begin(), v2.end(), v1.begin()+v2.size());
  for_each(v1.begin(), v1.end(), print_bool);
  print_int(v1.size());
  print_int(v1.count());
  printf("\n");
}
